Android 上の FlutterMain.setIsRunningInRobolectricTest が削除されました
まとめ
Java JUnit テスト (Robolectric テストなど) を作成する場合
Flutter エンジンの Java 埋め込みに対抗し、FlutterMain.setIsRunningInRobolectricTest(true)
API、
これを次のように置き換えます。
FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
FlutterInjector.setInstance(
new FlutterInjector.Builder()
.setFlutterLoader(new FlutterLoader(mockFlutterJNI))
.build());
これは非常に珍しいことです。
コンテクスト
のFlutterMain
クラス自体は非推奨になり、次のクラスに置き換えられます。FlutterInjector
クラス。のFlutterMain
クラスはいくつかの値を使用します
静的な変数や関数を使用すると、テストが困難になります。FlutterMain.setIsRunningInRobolectricTest()
は 1 つのアドホック静的です
テストを必要とせずに JVM 上のホスト マシンでテストを実行できるようにするメカニズム。
をロードしていますlibflutter.so
ネイティブライブラリ
(ホストマシンでは実行できません)。
1 回限りのソリューションではなく、テストに必要なすべての依存関係の注入
Flutter の Android/Java エンジンの埋め込みは、FlutterInjector
クラス。
以内FlutterInjector
クラス、
のsetFlutterLoader()
ビルダー
関数を使用すると、FlutterLoader
クラスが検索してロードします
のlibflutter.so
図書館。
変更内容の説明
これエンジンコミットを削除しましたFlutterMain.setIsRunningInRobolectricTest()
テスト機能。
そして次の専念を追加しましたFlutterInjector
テストを支援するクラス。PR 20473さらにリファクタリングされたFlutterLoader
とFlutterJNI
追加のモックとテストを可能にするため。
追加のモック/テストを可能にするため。
移行ガイド
移行前のコード:
FlutterMain.setIsRunningInRobolectricTest(true);
移行後のコード:
FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
FlutterInjector.setInstance(
new FlutterInjector.Builder()
.setFlutterLoader(new FlutterLoader(mockFlutterJNI))
.build());
タイムライン
リリースされたバージョン: 1.22.0-2.0.pre.133
安定版リリース: 2.0.0